const app = getApp();
const {
  userApi
} = require('../../services/api');

Page({
  data: {
    username: '',
    password: '',
    loginTip: '',
    rememberPwd: false,
    loading: false,
    loginType: 'password' // 默认使用密码登录
  },

  onLoad() {
    // 页面加载时的逻辑
    // 检查是否有保存的账号密码
    const savedAccount = wx.getStorageSync('savedAccount');
    if (savedAccount) {
      this.setData({
        username: savedAccount.username,
        password: savedAccount.password,
        rememberPwd: true
      });
    }

    // 检查是否支持微信登录
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 用户已经授权过，可以直接调用 getUserInfo 获取头像昵称
          this.setData({
            loginType: 'wechat' // 如果已授权，默认使用微信登录
          });
        }
      }
    });
  },

  // 切换登录方式
  switchLoginType(e) {
    const type = e.currentTarget.dataset.type;
    this.setData({
      loginType: type,
      loginTip: '' // 清空提示信息
    });
  },

  // 输入账号
  onUsernameInput(e) {
    this.setData({
      username: e.detail.value.trim()
    });
  },

  // 输入密码
  onPasswordInput(e) {
    this.setData({
      password: e.detail.value.trim()
    });
  },

  // 切换记住密码
  toggleRememberPwd() {
    this.setData({
      rememberPwd: !this.data.rememberPwd
    });
  },

  // 忘记密码
  forgetPassword() {
    wx.showModal({
      title: '忘记密码',
      content: '请联系管理员重置密码',
      showCancel: false,
      confirmText: '知道了'
    });
  },

  // 账号密码登录
  async loginWithPassword() {
    const {
      username,
      password,
      rememberPwd
    } = this.data;

    // 验证输入
    if (!username || !password) {
      this.setData({
        loginTip: '请输入手机号和密码'
      });
      return;
    }

    // 验证手机号格式
    // if (!/^1\d{10}$/.test(username)) {
    //   this.setData({
    //     loginTip: '请输入正确的手机号'
    //   });
    //   return;
    // }

    // 设置加载状态
    this.setData({
      loading: true,
      loginTip: '登录中...'
    });

    try {
      // 调用登录 API
      const res = await userApi.login({
        username,
        password,
        loginType: 'password'
      });
      // 登录成功
      this.setData({
        loginTip: '登录成功',
        loading: false
      });

      // 如果选择了记住密码，保存账号密码
      if (rememberPwd) {
        wx.setStorageSync('savedAccount', {
          username,
          password
        });
      } else {
        wx.removeStorageSync('savedAccount');
      }

      // 保存用户信息和 token
      this.saveUserInfoAndRedirect(res.data);
    } catch (error) {
      console.error('登录失败:', error);

      this.setData({
        loginTip: error.message || '登录失败，请重试',
        loading: false
      });
    }
  },

  // 微信一键登录
  async loginWithWechat(e) {
    // 用户拒绝授权
    if (!e.detail.userInfo) {
      this.setData({
        loginTip: '授权失败，请允许获取您的用户信息'
      });
      return;
    }

    // 设置加载状态
    this.setData({
      loading: true,
      loginTip: '登录中...'
    });

    try {
      // 获取微信登录凭证
      const loginRes = await new Promise((resolve, reject) => {
        wx.login({
          success: res => resolve(res),
          fail: err => reject(err)
        });
      });

      if (!loginRes.code) {
        throw new Error('获取微信登录凭证失败');
      }
      // 调用登录 API
      const res = await userApi.login({
        code: loginRes.code,
        userInfo: e.detail.userInfo,
        loginType: 'wechat'
      });

      // 登录成功
      this.setData({
        loginTip: '登录成功',
        loading: false
      });

      // 保存用户信息和 token
      this.saveUserInfoAndRedirect(res.data);
    } catch (error) {
      console.error('微信登录失败:', error);

      this.setData({
        loginTip: error.message || '微信登录失败，请重试',
        loading: false
      });
    }
  },

  // 保存用户信息并跳转
  saveUserInfoAndRedirect(data) {
    if (data && data.token) {
      wx.setStorageSync('token', data.token);
    }

    if (data && data.user) {
      // 保存用户 ID
      wx.setStorageSync('userId', data.user.id);
      wx.setStorageSync('userInfo', data.user);

      // 将用户信息存入全局数据 - 刷新会丢失 
      if (app.globalData) {
        app.globalData.userInfo = data.user;
      }
    }

    // 跳转到首页
    setTimeout(() => {
      wx.switchTab({
        url: '/pages/home/index'
      });
    }, 800);
  },

  // 显示隐私政策
  showPrivacy() {
    wx.showModal({
      title: '用户协议和隐私政策',
      content: '感谢您使用楠楠家厨小程序。我们非常重视您的个人信息和隐私保护。使用微信登录需要获取您的公开信息（昵称、头像等）。详细内容请参阅《用户协议和隐私政策》。',
      confirmText: '我知道了',
      showCancel: false
    });
  }
});